package com.umariana.ClinicaVeterinaria.Persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.umariana.ClinicaVeterinaria.mundo.Cuenta;



public class CuentaDao extends Database
{

	/**
	 * contructor de la clase cuentaDao
	 */
	public CuentaDao() 
	{
		super();
		
	}
	
	/**
	 * agrega una cuenta que ingresa como parametro a la base de datos
	 * @param c Cuenta que se desea agregar
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public void insertCuenta(Cuenta c) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
	{
		conectar();
		Connection conexion = getConexion();
		PreparedStatement comando = conexion.prepareStatement("call AgregarCuenta(?,?)");
		comando.setInt(1, Integer.parseInt(c.getPropietario().getIdentificacion()));
		comando.setFloat(2, c.getSaldo());
		comando.executeUpdate();
		comando.close();
		desconectar();
		
	}

	/**
	 * modifica una cuenta que ingresa como parametro a la base de datos
	 * @param  c Cuenta  que se desea agregar
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public void updateACuenta(Cuenta c) throws SQLException, InstantiationException, IllegalAccessException, ClassNotFoundException
	{
		conectar();
		Connection conexion = getConexion();
		PreparedStatement comando = conexion.prepareStatement("call AgregarCargoCuenta(?,?)");
		comando.setInt(1, Integer.parseInt(c.getPropietario().getIdentificacion()));
		comando.setFloat(2, 20000);	
		comando.executeUpdate();
		comando.close();
		desconectar();
	}
	
	/**
	 * 
	 * @param c
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public void updateRCuenta(Cuenta c , float pSaldo) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
	{
		conectar();
		Connection conexion = getConexion();
		PreparedStatement comando = conexion.prepareStatement("call restarCargoCuenta(?,?)");
		comando.setInt(1, Integer.parseInt(c.getPropietario().getIdentificacion()));
		comando.setFloat(2, pSaldo);	
		comando.executeUpdate();
		comando.close();
		desconectar();
	}
	
	/**
	 * elimina una cuenta que ingresa como parametro a la base de datos
	 * @param  c Cuenta  que se desea agregar
	 */
	public void deleteCuenta(Cuenta c)
	{
		
	}
	
	/**
	 * retorna la cuenta a buscar
	 * @paramc c Cuenta a buscar
	 * @return la lista con la cuenta
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public Cuenta selectrcuenta (Cuenta c) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
	{
		conectar();
		Connection conexion = getConexion();
		PreparedStatement comando = conexion.prepareStatement("call darCuentaPropietario(?)");
		comando.setInt(1, Integer.parseInt(c.getPropietario().getIdentificacion()));
		ResultSet rs = comando.executeQuery();
		while(rs.next())
		{
			c.setSaldo(rs.getFloat(2));
		}
		comando.close();
		desconectar();
		return c;
	}
	
	/**
	 * retorn todos las cuentas
	 * @return lista de cuentas
	 */
	public ArrayList<Cuenta> selectAllcuentas()
	{
		return null;
	}


	
	
}
